Imports System.Linq

Namespace Helpers
    ''' <summary>
    ''' Es una coleccion que se utiliza para el orden de la query.
    ''' </summary>
    ''' <remarks></remarks>
    Public Class OrdenColeccion
        Inherits System.Collections.Generic.List(Of Orden)

        ''' <summary>
        ''' Transforma desde un string con formato json al tipo OrdenCollection.
        ''' </summary>
        ''' <param name="Orden">String con formato json que se convertira.</param>
        ''' <returns>devulve una instancia de OrdenColeccion con los datos que se pasaron como parametro.</returns>
        ''' <remarks></remarks>
        Public Shared Function Parse(Orden As String) As OrdenColeccion
            If Not String.IsNullOrWhiteSpace(Orden) Then
                Dim cOrden As New OrdenColeccion
                cOrden = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(Of OrdenColeccion)(Orden, cOrden)
                If String.IsNullOrWhiteSpace(cOrden.FirstOrDefault().Property) Then
                    cOrden = New Object
                End If
                Return cOrden
            End If
            Return New OrdenColeccion
        End Function

        ''' <summary>
        ''' Convierte desde el tipo de datos OrdenColeccion a String.
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function ToSQL() As String
            Dim sb As New Text.StringBuilder
            For Each item As Orden In Me
                sb.Append(item.ToSQL() & ",")
            Next
            Return sb.ToString().TrimEnd(",")
        End Function

        ''' <summary>
        ''' Item Orden se utilizan como parte de la coleccion OrdenColeccion.
        ''' </summary>
        ''' <remarks></remarks>
        Public Class Orden
            Public Property [Property] As String
            Public Property Direction As String

            Public Function ToSQL() As String
                Return [Property] & " " & Direction
            End Function
        End Class
    End Class
End Namespace